perm filename MIXED.FAI[TMP,LCS]1 blob sn#172853 filedate 1975-08-12 generic text, type C, neo UTF8
COMMENT ⊗   VALID 00010 PAGES
C REC  PAGE   DESCRIPTION
C00001 00001
C00002 00002		TITLE MIXER
C00004 00003		CLRBFI
C00006 00004	DLAY:	ADD DUR,BC1
C00008 00005	SPLICE:	SETOM SFLG#
C00009 00006	ONAME:	CLRBFI
C00011 00007	IN2:	IN 2,
C00013 00008	NAME:	'MUSIC '
C00015 00009	GETNAM:	MOVEI A,
C00016 00010	GETNUM:	PUSHJ P,INNUM
C00018 ENDMK
C⊗;
	TITLE MIXER
	A←1 ↔ B←2 ↔ C←3 ↔ D←4 ↔ E←5
	DUR←6 ↔ MAX←7 ↔ R1←10 ↔ R2←11
	R3←12 ↔ BC1←13 ↔ BC2←14 ↔ BC3←15
	P←17 ↔ NBUFS←←4
	DEFINE FIXX(N)
   <	JUMPGE	N,.+5
	MOVNS	N
	FIX	N,233000
	MOVNS	N
	CAIA
	FIX 	N,233000    >
	DEFINE FLOAT(N)
   <	TLC N,232000
	FADR N,N   >

MIXER:	MOVE P,[IOWD 20,PDL]
	CLRBFI
	OUTSTR [ASCIZ/
	TYPE NAME 1: /]
	SETZ BC1,
	PUSHJ P,GNAME
	OPEN 11,[14↔'DSK   '↔BUF1]
	JRST 4,.
	INBUF 11,NBUFS
	LOOKUP 11,FILNAM
	JRST MIXER
	AOJ BC1,

SECOND:	CLRBFI
	OUTSTR [ASCIZ/	TYPE NAME 2: /]
	PUSHJ P,GNAME
	OPEN 2,[14↔'DSK   '↔BUF2]
	JRST 4,.
	INBUF 2,NBUFS
	LOOKUP 2,FILNAM
	JRST SECOND
	AOJ BC1,

	CLRBFI
	OUTSTR [ASCIZ/	NUMBER OF CHANNELS = /]
	INCHWL A
	PUSHJ P,INNUM
	SKIPLE
	CAILE 4
	HRRZI 1
	HRRZM NCHNLS#
	
	CLRBFI
	OUTSTR [ASCIZ/	DELAY TIME = /]
	INCHWL A
	PUSHJ P,GETNUM
	HRRZ A,NCHNLS
	FLOAT(A)
	FMPR A
	MOVEM SNUM2#
	CLRBFI
	OUTSTR [ASCIZ/	SRATE = /]
	INCHWL A
	PUSHJ P,INNUM
	SKIPN
	HRRZI =10000
	FLOAT(0)
	MOVEM FSRATE#
	FMPR SNUM2
	FIXX(0)
	MOVEM SNUM2

GRAT:	CLRBFI
	OUTSTR [ASCIZ/	SPLICE OR RATIO (S OR <R1>:<R2>) = /]
	INCHWL A
	CAIE A,"s"
	CAIN A,"S"
	JRST SPLICE
	SETZM SFLG#
	PUSHJ P,GETNUM
	SKIPG R1,
	MOVE R1,[1.]
	FMPR R1,[=4096.]
	FIXX(R1)
	INCHRS A
	JRST .+3
	PUSHJ P,GETNUM
	SKIPG R2,
	MOVE R2,[1.]
	FMPR R2,[=4096.]
	FIXX(R2)
	PUSHJ P,ONAME
	AOJ BC2,
	SETZ MAX,
	SETOM DFLG#
DLAY:	ADD DUR,BC1
	CAML DUR,SNUM2
	JRST FIND
	PUSHJ P,MOV
	PUSHJ P,IN1
	JRST DLAY

MOV:	ILDB D,A
	TDON D,[NEG: 777777774000]
	LDB D,A
	IMUL D,R1
	ASH D,-15
	CAMLE D,MAX
	MOVE MAX,D
	IDPB D,C
	SOJLE BC3,MOVO
	SOJG BC1,MOV
	POPJ P,

MOVO:	PUSHJ P,OBUF
	SOJG BC1,MOV
	POPJ P,

EQBUF:	PUSHJ P,IN1
	JRST SETFLG

FIND:	SOJ BC2,
	SUB DUR,SNUM2
	JUMPLE DUR,EQBUF
	SUB BC1,DUR
	SKIPLE BC1
	PUSHJ P,MOV
SETFLG:	SETZM DFLG
	MOVE BC1,DUR
	MOVE DUR,SNUM2
	ADD DUR,BC2
	
MIX:	ILDB D,A
	TDON D,NEG
	LDB D,A
	ILDB E,B
	TDON E,NEG
	LDB E,B
	IMUL D,R1
	IMUL E,R2
	ADD D,E
	ASH D,-15
	CAMLE D,MAX
	MOVE MAX,D
	IDPB D,C
	SOJLE BC3,MIXO
CKIN:	SOJLE BC1,MIXI
	SOJG BC2,MIX
	PUSHJ P,IN2
	ADD DUR,BC2
	JRST MIX

MIXO:	PUSHJ P,OBUF
	JRST CKIN
MIXI:	PUSHJ P,IN1
	JRST CKIN+1
SPLICE:	SETOM SFLG#
	PUSHJ P,ONAME
SLOOP:	ADD DUR,BC1
	CAML DUR,SNUM2
	JRST NXPART
	PUSHJ P,SPLM
	PUSHJ P,OBUF
	PUSHJ P,IN1
	JRST SLOOP

SPLM:	IDIVI BC3,3
	MOVNS BC3
	HRLI C,(BC3)
	AOJ C,
	MOVE [SPLOP,,MAX]
	BLT BC1
	JRST MAX
SPLOP:	AOJ A,
	MOVE D,(A)
	MOVEM D,(C)
	AOBJN C,MAX
	POPJ P,

NXPART:	SUB DUR,SNUM2
	JUMPLE DUR,FIL2
	SUB BC3,DUR
	CAIL BC3,3
	PUSHJ P,SPLM
	PUSHJ P,OBUF 
FIL2:	MOVE DUR,SNUM2
	ADD DUR,BC2
	MOVE A,B
	PUSHJ P,SPLM
	PUSHJ P,OBUF
	PUSHJ P,IN2
	JRST FIL2+1
ONAME:	CLRBFI
	OUTSTR [ASCIZ/	OUTPUT NAME : /]
	PUSHJ P,GNAME
	OPEN [14↔'DSK   '↔BUF3,,0]
	JRST 4,.
	OUTBUF NBUFS
	ENTER FILNAM
	JRST ONAME
	PUSHJ P,OBUF+1
	SETZM EOF1#
	SETZM EOF2#
	SETZ DUR,
	PUSHJ P,IN1
	PUSHJ P,IN2
	POPJ P,

IN1:	IN 11,
	CAIA
	JRST CKEOF
	HRRZI BC1,3
	IMUL BC1,BUF1+2
	HRRZ A,BUF1+1
	HRLI A,1400
	POPJ P,

CKEOF:	STATO 11,20000
	JRST 4,.
	SETOM EOF1
	SKIPGE EOF2
	JRST DONE
	SKIPL SFLG
	SKIPGE DFLG
	JRST BREAK
PART2:	MOVE R1,R2
	SOJLE BC2,GMOR
	MOVE BC1,BC2
	MOVE A,B
	PUSHJ P,MOV
GMOR:	PUSHJ P,IN2
	ADD DUR,BC2
	JRST PART2+2

BREAK:	SUB DUR,SNUM2
	SKIPGE SFLG
	JRST ZSPL
	SETZ D,
ZRIT:	IDPB D,C
	SOJLE BC3,ZOB
	AOJL DUR,ZRIT
	MOVE DUR,SNUM2
	JRST PART2

ZSPL:	HRLI C,(DUR)
	SETZM (C)
	AOBJN C,.-1
	POP P,D
	JRST FIL2+1

ZOB:	PUSHJ P,OBUF
	JRST ZRIT+2
IN2:	IN 2,
	CAIA
	JRST CKEOF2
	HRRZI BC2,3
	IMUL BC2,BUF2+2
	HRRZ B,BUF2+1
	HRLI B,1400
	POPJ P,

CKEOF2:	STATO 2,20000
	JRST 4,.
	SETOM EOF2
	SKIPL EOF1
	SKIPGE SFLG
	JRST DONE
	ADD DUR,BC1
	PUSHJ P,MOV
	PUSHJ P,IN1
	JRST .-3

OBUF:	HRRM C,BUF3+1
	OUT
	CAIA
	JRST 4,.
	HRRZI BC3,3
	IMUL BC3,BUF3+2
	HRRZ C,BUF3+1
	HRLI C,1400
	POPJ P,

DONE:	PUSHJ P,OBUF
	RELEAS
	SKIPGE SFLG
	JRST NOMAX
	OUTSTR [ASCIZ/
	MAX AMPL = /]
	MOVE MAX
	PUSHJ P,OUTINT
NOMAX:	OUTSTR [ASCIZ/
	NUMBER OF SAMPLES = /]
	MOVE DUR
	PUSHJ P,OUTINT
	OUTSTR [ASCIZ/
	TOTAL DUR = /]
	IDIV DUR,NCHNLS
	FLOAT(DUR)
	FDVR DUR,FSRATE
	MOVE DUR
	FIXX(0)
	PUSHJ P,OUTINT
	HRRZI "."
	OUTCHR
	MOVE DUR
	FIXX(DUR)
	FLOAT(DUR)
	FSBR DUR
	FMPR [=1000.]
	FIXX(0)
	AOJ
	PUSHJ P,OUTINT
	EXIT
NAME:	'MUSIC '
	'MUSAA '
	'MUSIC '
EXT:	'MUS   '
	'DMD   '
	'MUS   '
GNAME:	SETZM FILEXT+1
	SETZM FILPPN
	MOVE A,EXT(BC1)
	MOVEM A,FILEXT
	PUSHJ P,GETNAM
	SKIPN A
 	MOVE A,NAME(BC1)
    	MOVEM A,FILNAM
	CAIE C,"."
	JRST NOEXTN
	PUSHJ P,GETNAM
	MOVEM A,FILEXT
NOEXTN:	CAIE C,"["
	JRST FFDX
	PUSHJ P,GETP
	HRLZM A,FILPPN
	PUSHJ P,GETP
	HRRM A,FILPPN
FFDX:	INCHRW C
	CAIE C,12
	JRST FFDX
	POPJ P,
GETNAM:	MOVEI A,
	MOVE B,[440600,,A]
GETNML:	PUSHJ P,RCH
	POPJ P,
	SUBI C,40
	TLNE B,770000
	IDPB C,B
	JRST GETNML

GETP:	MOVEI A,
GETPL:	PUSHJ P,RCH
	POPJ P,
	TRNE A,770000
	JRST GETPL
	LSH A,6
	ADDI A,-40(C)
	JRST GETPL

RCH:	INCHWL C
	CAIN C,42
	JRST RCHQ
	CAIE C,11
	CAIN C," "
	JRST RCH
	CAIE C,"."
	CAIN C,","
	POPJ P,
	CAIE C,"["
	CAIN C,"]"
	POPJ P,
RCHQR:	CAIGE C,40
	POPJ P,
	CAIL C,"a"
	CAILE C,"z"
	CAIA
	SUBI C,40
POPJ1:	AOS (P)
	POPJ P,

RCHQ:	INCHWL C
	JRST RCHQR
GETNUM:	PUSHJ P,INNUM
	FLOAT(0)
	CAIE A,"."
	POPJ P,
	MOVE C,
	INCHRS A
	POPJ P,
	PUSHJ P,INNUM
	JUMPE NODP
	FLOAT(0)
	FMPR TABL(B)
NODP:	FADR C
	POPJ P,

TABL:	=0.1
	=0.01
	=0.001
	=0.0001
	=0.00001

INNUM:	SETZ
	SETO B,
	CAIL A,60
	CAILE A,71
	POPJ P,
	IMULI =10
	ADDI -60(A)
	AOJ B,
	INCHRS A
	POPJ P,
	JRST INNUM+2

OUTINT:	HRRZI B,7
	JUMPE OUTZ
	IDIVI =10
	ADDI A,60
	HRRZM A,BLK(B)
	SOJGE B,OUTINT+1
OCHR:	OUTCHR BLK+1(B)
	CAIGE B,6
	AOJA B,OCHR
	POPJ P,
OUTZ:	CAIL B,7
	HRLZI B,300000
	JRST OCHR

FILNAM:	0
FILEXT:	0
	0
FILPPN:	0
BUF1:	BLOCK 3
BUF2:	BLOCK 3
BUF3:	BLOCK 3
PDL:	BLOCK 44
BLK:	BLOCK 10
	END MIXER